在這一章中,我們將介紹 EVM 中與存取記憶體相關的指令,包括 MLOAD、MSTORE 和 MSTORE8。
MLOAD = 0x51
MSTORE = 0x52
MSTORE8 = 0x53
這些指令用於存取合約的記憶體,允許合約讀取和寫入記憶體中的資料。
def mload(self):
location = self.evm.stack.pop()
data = read_from_memory(location, 32) # 讀取 32 位資料
value = int.from_bytes(data, byteorder='big')
self.evm.stack.append(value)
def mstore(self):
location = self.evm.stack.pop()
value = self.evm.stack.pop()
data = value.to_bytes(32, byteorder='big')
write_to_memory(location, data) # 將資料寫入記憶體
def mstore8(self):
location = self.evm.stack.pop()
value = self.evm.stack.pop() & 0xFF # 只保留低位 8 位
data = value.to_bytes(1, byteorder='big')
write_to_memory(location, data) # 將資料寫入記憶體
這些指令允許合約在執行過程中存取記憶體,進而讀取或寫入資料。
請注意,這些指令的實現需要訪問合約的記憶體,你需要根據具體情況自行實現相應的記憶體讀取和寫入邏輯。
這將把從指定位置讀取的 32 位資料推送到堆疊。
在這一章中,我們介紹了 EVM 中與存取記憶體相關的指令,包括 MLOAD、MSTORE 和 MSTORE8。這些指令允許合約讀取和寫入記憶體中的資料。